home *** CD-ROM | disk | FTP | other *** search
- // Copyright (C) 1999-2000 Id Software, Inc.
- //
- /*
- =======================================================================
-
- MAIN MENU
-
- =======================================================================
- */
-
-
- #include "ui_local.h"
-
-
- #define ID_SINGLEPLAYER 10
- #define ID_MULTIPLAYER 11
- #define ID_SETUP 12
- #define ID_DEMOS 13
- #define ID_CINEMATICS 14
- #define ID_EXIT 15
-
- #define MAIN_BANNER_MODEL "models/mapobjects/banner/banner5.md3"
- #define MAIN_MENU_VERTICAL_SPACING 34
-
-
- typedef struct {
- menuframework_s menu;
-
- menutext_s singleplayer;
- menutext_s multiplayer;
- menutext_s setup;
- menutext_s demos;
- menutext_s cinematics;
- menutext_s exit;
-
- qhandle_t bannerModel;
- } mainmenu_t;
-
-
- static mainmenu_t s_main;
-
-
- /*
- =================
- MainMenu_ExitAction
- =================
- */
- static void MainMenu_ExitAction( qboolean result ) {
- if( !result ) {
- return;
- }
- UI_PopMenu();
- UI_CreditMenu();
- }
-
-
- /*
- =================
- Main_MenuEvent
- =================
- */
- void Main_MenuEvent (void* ptr, int event) {
- if( event != QM_ACTIVATED ) {
- return;
- }
-
- switch( ((menucommon_s*)ptr)->id ) {
- case ID_SINGLEPLAYER:
- UI_SPLevelMenu();
- break;
-
- case ID_MULTIPLAYER:
- UI_ArenaServersMenu();
- break;
-
- case ID_SETUP:
- UI_SetupMenu();
- break;
-
- case ID_DEMOS:
- UI_DemosMenu();
- break;
-
- case ID_CINEMATICS:
- UI_CinematicsMenu();
- break;
-
- case ID_EXIT:
- UI_ConfirmMenu( "EXIT GAME?", NULL, MainMenu_ExitAction );
- break;
- }
- }
-
-
- /*
- ===============
- MainMenu_Cache
- ===============
- */
- void MainMenu_Cache( void ) {
- s_main.bannerModel = trap_R_RegisterModel( MAIN_BANNER_MODEL );
- }
-
-
- /*
- ===============
- Main_MenuDraw
- ===============
- */
- static void Main_MenuDraw( void ) {
- refdef_t refdef;
- refEntity_t ent;
- vec3_t origin;
- vec3_t angles;
- float adjust;
- float x, y, w, h;
- vec4_t color = {0.5, 0, 0, 1};
-
- // setup the refdef
-
- memset( &refdef, 0, sizeof( refdef ) );
-
- refdef.rdflags = RDF_NOWORLDMODEL;
-
- AxisClear( refdef.viewaxis );
-
- x = 0;
- y = 0;
- w = 640;
- h = 120;
- UI_AdjustFrom640( &x, &y, &w, &h );
- refdef.x = x;
- refdef.y = y;
- refdef.width = w;
- refdef.height = h;
-
- adjust = 0; // JDC: Kenneth asked me to stop this 1.0 * sin( (float)uis.realtime / 1000 );
- refdef.fov_x = 60 + adjust;
- refdef.fov_y = 19.6875 + adjust;
-
- refdef.time = uis.realtime;
-
- origin[0] = 300;
- origin[1] = 0;
- origin[2] = -32;
-
- trap_R_ClearScene();
-
- // add the model
-
- memset( &ent, 0, sizeof(ent) );
-
- adjust = 5.0 * sin( (float)uis.realtime / 5000 );
- VectorSet( angles, 0, 180 + adjust, 0 );
- AnglesToAxis( angles, ent.axis );
- ent.hModel = s_main.bannerModel;
- VectorCopy( origin, ent.origin );
- VectorCopy( origin, ent.lightingOrigin );
- ent.renderfx = RF_LIGHTING_ORIGIN | RF_NOSHADOW;
- VectorCopy( ent.origin, ent.oldorigin );
-
- trap_R_AddRefEntityToScene( &ent );
-
- trap_R_RenderScene( &refdef );
-
- // standard menu drawing
-
- Menu_Draw( &s_main.menu );
-
- if (uis.demoversion) {
- UI_DrawProportionalString( 320, 372, "DEMO FOR MATURE AUDIENCES DEMO", UI_CENTER|UI_SMALLFONT, color );
- UI_DrawString( 320, 400, "Quake III Arena(c) 1999, Id Software, Inc. All Rights Reserved", UI_CENTER|UI_SMALLFONT, color );
- } else {
- UI_DrawString( 320, 450, "Quake III Arena(c) 1999, Id Software, Inc. All Rights Reserved", UI_CENTER|UI_SMALLFONT, color );
- }
- }
-
-
- /*
- ===============
- UI_MainMenu
-
- The main menu only comes up when not in a game,
- so make sure that the attract loop server is down
- and that local cinematics are killed
- ===============
- */
- void UI_MainMenu( void ) {
- int y;
- int style = UI_CENTER | UI_DROPSHADOW;
-
- trap_Cvar_Set( "sv_killserver", "1" );
-
- if( !uis.demoversion && !ui_cdkeychecked.integer ) {
- char key[17];
-
- trap_GetCDKey( key, sizeof(key) );
- if( strcmp( key, "123456789" ) == 0 ) {
- UI_CDKeyMenu();
- return;
- }
- }
-
- memset( &s_main, 0 ,sizeof(mainmenu_t) );
-
- MainMenu_Cache();
-
- s_main.menu.draw = Main_MenuDraw;
- s_main.menu.fullscreen = qtrue;
- s_main.menu.wrapAround = qtrue;
- s_main.menu.showlogo = qtrue;
-
- y = 134;
- s_main.singleplayer.generic.type = MTYPE_PTEXT;
- s_main.singleplayer.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
- s_main.singleplayer.generic.x = 320;
- s_main.singleplayer.generic.y = y;
- s_main.singleplayer.generic.id = ID_SINGLEPLAYER;
- s_main.singleplayer.generic.callback = Main_MenuEvent;
- s_main.singleplayer.string = "SINGLE PLAYER";
- s_main.singleplayer.color = color_red;
- s_main.singleplayer.style = style;
-
- y += MAIN_MENU_VERTICAL_SPACING;
- s_main.multiplayer.generic.type = MTYPE_PTEXT;
- s_main.multiplayer.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
- s_main.multiplayer.generic.x = 320;
- s_main.multiplayer.generic.y = y;
- s_main.multiplayer.generic.id = ID_MULTIPLAYER;
- s_main.multiplayer.generic.callback = Main_MenuEvent;
- s_main.multiplayer.string = "MULTIPLAYER";
- s_main.multiplayer.color = color_red;
- s_main.multiplayer.style = style;
-
- y += MAIN_MENU_VERTICAL_SPACING;
- s_main.setup.generic.type = MTYPE_PTEXT;
- s_main.setup.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
- s_main.setup.generic.x = 320;
- s_main.setup.generic.y = y;
- s_main.setup.generic.id = ID_SETUP;
- s_main.setup.generic.callback = Main_MenuEvent;
- s_main.setup.string = "SETUP";
- s_main.setup.color = color_red;
- s_main.setup.style = style;
-
- y += MAIN_MENU_VERTICAL_SPACING;
- s_main.demos.generic.type = MTYPE_PTEXT;
- s_main.demos.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
- s_main.demos.generic.x = 320;
- s_main.demos.generic.y = y;
- s_main.demos.generic.id = ID_DEMOS;
- s_main.demos.generic.callback = Main_MenuEvent;
- s_main.demos.string = "DEMOS";
- s_main.demos.color = color_red;
- s_main.demos.style = style;
-
- y += MAIN_MENU_VERTICAL_SPACING;
- s_main.cinematics.generic.type = MTYPE_PTEXT;
- s_main.cinematics.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
- s_main.cinematics.generic.x = 320;
- s_main.cinematics.generic.y = y;
- s_main.cinematics.generic.id = ID_CINEMATICS;
- s_main.cinematics.generic.callback = Main_MenuEvent;
- s_main.cinematics.string = "CINEMATICS";
- s_main.cinematics.color = color_red;
- s_main.cinematics.style = style;
-
- y += MAIN_MENU_VERTICAL_SPACING;
- s_main.exit.generic.type = MTYPE_PTEXT;
- s_main.exit.generic.flags = QMF_CENTER_JUSTIFY|QMF_PULSEIFFOCUS;
- s_main.exit.generic.x = 320;
- s_main.exit.generic.y = y;
- s_main.exit.generic.id = ID_EXIT;
- s_main.exit.generic.callback = Main_MenuEvent;
- s_main.exit.string = "EXIT";
- s_main.exit.color = color_red;
- s_main.exit.style = style;
-
- Menu_AddItem( &s_main.menu, &s_main.singleplayer );
- Menu_AddItem( &s_main.menu, &s_main.multiplayer );
- Menu_AddItem( &s_main.menu, &s_main.setup );
- Menu_AddItem( &s_main.menu, &s_main.demos );
- Menu_AddItem( &s_main.menu, &s_main.cinematics );
- Menu_AddItem( &s_main.menu, &s_main.exit );
-
- trap_Key_SetCatcher( KEYCATCH_UI );
- uis.menusp = 0;
- UI_PushMenu ( &s_main.menu );
- }
-